package top.someapp.applib;

import android.content.Context;
import java.util.Map;

/**
 * 应用 公共的 规范、接口和约定, 里面只有接口
 *
 * @author zwz
 * Created on 2019-09-06
 */
public interface Base {

    /**
     * 可描述的，可以用文字说明的
     */
    interface Describable {

        String describe();
    }

    /**
     * 表示方法调用的信息，在和其他编程语言交互时使用(如：jsbridge)
     */
    interface MethodCallInfo {

        String className();

        String methodName();

        boolean hasArgument(String name);

        <T> T argument(String name);

        Map<String, ?> namedArguments();

        Object[] ordinalArguments();
    }

    interface Command {

        void execute(final MethodCallInfo methodCall, final Result result);
    }

    interface CommandProvider {

        Command getCommand(Comparable id);
    }

    interface EventSender {

        void onNativeEvent(Result result);
    }

    interface FlutterNativePlugin {

        void setCommandProvider(CommandProvider commandProvider);

        EventSender getEventSender();
    }

    interface Initialization {

        boolean initialize(Context context);
    }
}
